package com.example.xunai.service.conversation;

import com.example.xunai.dto.request.ai.ChatRequest;
import com.example.xunai.dto.request.conversation.CreateConversationRequest;
import com.example.xunai.dto.request.conversation.UpdateConversationRequest;
import com.example.xunai.dto.response.conversation.ConversationResponse;
import com.example.xunai.dto.response.conversation.ConversationListResponse;
import com.example.xunai.dto.response.conversation.MessageResponse;
import com.example.xunai.entity.Conversation;

import java.util.List;

/**
 * 对话服务接口
 */
public interface ConversationService {

    /**
     * 获取对话（根据ChatRequest）
     */
    Conversation getConversation(ChatRequest request);

    /**
     * 获取用户的所有对话历史
     */
    ConversationListResponse getUserConversationsResponse(Long userId, Integer page, Integer size);

    /**
     * 创建新对话
     */
    ConversationResponse createConversation(CreateConversationRequest request);

    /**
     * 根据会话ID获取对话
     */
    Conversation getConversationBySessionId(String sessionId);

    /**
     * 根据用户ID和会话ID获取对话
     */
    Conversation getConversationByUserIdAndSessionId(Long userId, String sessionId);

    /**
     * 根据ID获取对话（带权限校验和缓存）
     */
    Conversation getConversationById(Long userId, Long conversationId);

    /**
     * 根据ID获取对话响应
     */
    ConversationResponse getConversationResponseById(Long userId, Long conversationId);

    /**
     * 更新对话
     */
    ConversationResponse updateConversation(Long conversationId, UpdateConversationRequest request);

    /**
     * 更新对话时间
     */
    void updateConversationTime(Long conversationId);

    /**
     * 获取对话的所有消息
     */
    List<MessageResponse> getConversationMessageResponses(Long userId, Long conversationId);

    /**
     * 删除对话
     */
    void deleteConversation(Long userId, Long conversationId);

    /**
     * 验证对话模型是否匹配
     */
    boolean validateConversationModel(Long conversationId, String requestedModel);
}